var mysql = require('mysql');
var dbConfig = require('./DBConfig');
var userSQL = require('./Usersql');
var moment = require('moment');
const express = require('express');
var fs = require("fs");  // 引入fs模块
 
const app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());

// 使用DBConfig.js的配置信息创建一个MySql链接池
var pool = mysql.createPool(dbConfig.mysql);
// 响应一个JSON数据
var responseJSON = function (res, ret) {
  if (typeof ret === 'undefined') {
    res.json({
      code: '-200',
      msg: '操作失败'
    });
  } else {
    res.json(ret);
  }
};

// 用户注册
app.post('/api/reg', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    console.log(req.body)
    // 获取前台页面传过来的参数
    var param = req.body;
    var UserName = param.username;
    var PassWord = param.password;
    var IsVip = parseInt(param.isvip);
 
    var addSqlParams = [UserName,PassWord,IsVip];
    var _res = res;
    connection.query(userSQL.queryAll, function (err, res) {
      var isTrue = false;
      if (res) { //获取用户列表，循环遍历判断当前用户是否存在
        for (var i = 0; i < res.length; i++) {
          if (res[i].userName == UserName) {
            isTrue = true;
          }
        }
      }
      var data = {};
      data.isreg = !isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
      if (isTrue) {
        data.result = {
          code: 1,
          msg: '用户已存在'
        }; //登录成功返回用户信息
      } else {
        connection.query(userSQL.insert, addSqlParams, function (err, result) {
          console.log(result)
          if (result) {
            data.result = {
              code: 200,
              msg: '注册成功'
            };
          } else {
            data.result = {
              code: -1,
              msg: '注册失败'
            };
          }
        });
      }

      if (err) data.err = err;
      // 以json形式，把操作结果返回给前台页面
      setTimeout(function () {
        responseJSON(_res, data)
      }, 300);
      // responseJSON(_res, data);
      // 释放链接
      connection.release();

    });
  });
});



// 用户登录
app.post('/api/login', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var UserName = param.username;
    var PassWord = param.password;
    var IsVip;
    var token;
    var _res = res;
 
    connection.query(userSQL.queryAll, function (err, res, result) {
      var isTrue = false;
      if (res) { //获取用户列表，循环遍历判断当前用户是否存在
        for (var i = 0; i < res.length; i++) {
          if (res[i].userName == UserName && res[i].passWord == PassWord) {
            isTrue = true;
            IsVip=res[i].isVip;
            token=res[i].userName;
          }
        }
      }
      var data = {};
      data.IsVip = IsVip;
      data.token = token;
      data.isLogin = isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
      if (isTrue) {
        data.userInfo = {};
        data.userInfo.uid = UserName;
        // data.userInfo.userName = PassWord;
        result = {
          code: 200,
          msg: 'succeed'
        };
        data.result = result;
        responseJSON(_res, data);
      } //登录成功返回用户信息
      else {
        // result = {
        //   code: 401,
        //   msg: 'err',
        //   username:UserName,
        // };
        //  data.result = result;
        _res.status(401).send({ error:'登录失败' });
      }

      // if (err) data.err = err;
      // 以json形式，把操作结果返回给前台页面
      // responseJSON(_res, data);

      // 释放链接
      connection.release();

    });
  });
});


// 获取登录信息
app.post('/api/logInfo', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var token = param.token;
    var _res = res;
    var username;
    var VIP;
    connection.query(userSQL.getUserByname,token, function (err, res, result) {
      var isTrue = false;
      if (res) { //获取用户列表，循环遍历判断当前用户是否存在
        console.log(res)
        username=res[0].userName;
        VIP=res[0].isVip;
        isTrue = true;       
      }     
      var data = {};    
      data.vip=VIP;
      data.Loginfo = isTrue; //如果isTrue布尔值为true则成功 有false则失败
      if (isTrue) {   
        result = {
          code: 200,
          msg: 'succeed',
          name:username,
          img:res[0].img
        };
        data.result = result;
        responseJSON(_res, data);
      } //获取成功返回用户信息
      else {
        _res.status(401).send({ error:'查询失败' });
      }
      // 释放链接
      connection.release();
    });
  });
});


// 查询所有用户信息
app.post('/api/getUser', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var filter = param.filter;
    var _res = res;
    var usersData;
    var nowDate;
    if(filter&&filter.length>=1){
      console.log(filter)
      connection.query(`SELECT * FROM User WHERE userName LIKE '%${filter}%'`, function (err, res, result) {
        var isTrue = false;
        if (res) { //获取用户列表，循环遍历判断当前用户是否存在
          console.log(res)
          isTrue = true; 
          for (var i = 0; i < res.length; i++) {
            res[i].insertdate =new moment(res[i].insertdate).format("YYYY-MM-DD HH:mm:ss");        
          }
          usersData = res;
        }     
     
        var data = {};    
        data.users=usersData;       
        data.getuser = isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
        if (isTrue) {   
          result = {
            code: 200,
            msg: 'succeed',
          
          };
          data.result = result;
          responseJSON(_res, data);
        } //查询成功返回用户信息
        else {
          _res.status(401).send({ error:'模糊查询失败' });
        }
        // 释放链接
        connection.release();
      });
    }else {
      connection.query(userSQL.queryAll, function (err, res, result) {
        var isTrue = false;
        if (res) { //获取用户列表，循环遍历判断当前用户是否存在
          console.log(res)
          isTrue = true;       
          // console.log(new moment(res.insertdate).format("YYYY-MM-DD HH:mm:ss"))
          for (var i = 0; i < res.length; i++) {
            res[i].insertdate =new moment(res[i].insertdate).format("YYYY-MM-DD HH:mm:ss");        
          }
          usersData = res;
        }     
        var data = {};    
       
        data.users=usersData;
        // data.users.nowDate=nowDate;
        data.getuser = isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
        if (isTrue) {   
          result = {
            code: 200,
            msg: 'succeed',
          
          };
          data.result = result;
          responseJSON(_res, data);
        } //查询成功返回用户信息
        else {
          _res.status(401).send({ error:'查询失败' });
        }
        // 释放链接
        connection.release();
      });
    }
   
  });
});



// 升序排序用户信息
app.post('/api/usersAsc', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var key = param.key;
    var usersData;
    var _res = res;

    connection.query(`SELECT * FROM User ORDER BY ${key} ASC`,function (err, res, result) {
      var isTrue = false;
      if (res) { //获取用户列表，循环遍历判断当前用户是否存在
        console.log(res)
        isTrue = true;   
        for (var i = 0; i < res.length; i++) {
          res[i].insertdate =new moment(res[i].insertdate).format("YYYY-MM-DD HH:mm:ss");        
        }
        usersData = res;    
      }     
      var data = {};    
      data.users=usersData;
      data.Asc = isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
      if (isTrue) {   
        result = {
          code: 200,
          msg: 'succeed',
        };
        data.result = result;
        responseJSON(_res, data);
      } //升序排序成功返回用户信息
      else {
        _res.status(401).send({ error:'升序排序失败' });
      }
      // 释放链接
      connection.release();
    });
  });
});


// 降序排序用户信息
app.post('/api/usersDesc', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var key = param.key;
    var usersData;
    var _res = res;
 
    connection.query(`SELECT * FROM User ORDER BY ${key} DESC`, function (err, res, result) {
      var isTrue = false;
      if (res) { //获取用户列表，循环遍历判断当前用户是否存在
        console.log(res)
        for (var i = 0; i < res.length; i++) {
          res[i].insertdate =new moment(res[i].insertdate).format("YYYY-MM-DD HH:mm:ss");        
        }
        usersData = res;  
        isTrue = true;       
      }     
      var data = {};  
      data.users=usersData;  
      data.Desc = isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
      if (isTrue) {   
        result = {
          code: 200,
          msg: 'succeed',
        };
        data.result = result;
        responseJSON(_res, data);
      } //降序排序成功返回用户信息
      else {
        _res.status(401).send({ error:'降序排序失败' });
      }
      // 释放链接
      connection.release();
    });
  });
});


// 删除用户
app.post('/api/deleteUser', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var id = param.id;
    var _res = res;
    connection.query(`DELETE FROM User WHERE id=${id};`, function (err, res, result) {
      var isTrue = false;
      if (res) { //获取用户列表，循环遍历判断当前用户是否存在
        console.log(res)
        isTrue = true;       
      }     
      var data = {}; 
      data.delete = isTrue; //如果isTrue布尔值为true则登陆成功 有false则失败
      if (isTrue) {   
        result = {
          code: 200,
          msg: 'succeed',
        };
        data.result = result;
        responseJSON(_res, data);
      } //删除成功返回报告
      else {
        _res.status(500).send({ error:'删除失败' });
      }
      // 释放链接
      connection.release();
    });
  });
});


// 修改用户密码
app.post('/api/changepassword', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var id = param.id;  
    var newPassword =param.newPassword;
    var _res = res; 
    connection.query(`update User set passWord='${newPassword}' where id=${id}`, function (err, res, result) {
      var isTrue = false;
      console.log(id)
      console.log(newPassword)
      if (res) {
        console.log(res)
        isTrue = true;       
      }     
      var data = {}; 
      data.changePass = isTrue; //如果isTrue布尔值为true则成功 有false则失败
      if (isTrue) {   
        result = {
          code: 200,
          msg: 'succeed',
        };
        data.result = result;
        responseJSON(_res, data);
      } //修改成功返回报告
      else {
        _res.status(500).send({ error:'修改失败' });
      }
      // 释放链接
      connection.release();
    });
  });
});


// 修改用户权限
app.post('/api/changePower', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var id = param.id;  
    var vip =param.operationUser.vip;
    var _res = res; 
    connection.query(`update User set isVip=${vip} where id=${id}`, function (err, res, result) {
      var isTrue = false;
      console.log(id)
      console.log(vip)
      if (res) {
        console.log(res)
        isTrue = true;       
      }     
      var data = {}; 
      data.changePass = isTrue; //如果isTrue布尔值为true则成功 有false则失败
      if (isTrue) {   
        result = {
          code: 200,
          msg: 'succeed',
        };
        data.result = result;
        responseJSON(_res, data);
      } //修改成功返回报告
      else {
        _res.status(500).send({ error:'修改失败' });
      }
      // 释放链接
      connection.release();
    });
  });
});






// 用户头像上传
app.post('/api/uploadIMG', function (req, res, next) {
  // 从连接池获取连接
  pool.getConnection(function (err, connection) {
    // 获取前台页面传过来的参数
    var param = req.body;
    var username = param.username;  
    var base_64_url =param.imageUrl;
    var _res = res; 

    var path = 'D:/Graduation/Graduation-project/src/assets/'+ username  +'.jpg';//路径从app.js级开始找--
    var base64 = base_64_url.replace(/^data:image\/\w+;base64,/, ""); //去掉图片base64码前面部分data:image/png;base64
    var dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象，
    console.log('dataBuffer是否是Buffer对象：'+Buffer.isBuffer(dataBuffer)); // 输出是否是buffer对象
    fs.writeFile(path,dataBuffer,function(err){//用fs写入文件
        if(err){
            console.log(err);
        }else{
            console.log('写入成功！');
            var imgname = username  +'.jpg'
            connection.query(`update User set img='${imgname}' where userName='${username}'`, function (err, res, result) {
              var isTrue = false;
             
              if (res) {
                console.log(res)
                isTrue = true;       
              }     
              var data = {}; 
              data.uploda = isTrue; //如果isTrue布尔值为true则成功 有false则失败
              if (isTrue) {   
                result = {
                  code: 200,
                  msg: 'succeed',
                };
                data.result = result;
                responseJSON(_res, data);
              } //修改成功返回报告
              else {
                _res.status(500).send({ error:'修改失败' });
              }
              // 释放链接
              connection.release();
            });
        }
    });

    
  });
});








app.all('*', function (req, res, next) {
  //响应头指定了该响应的资源是否被允许与给定的origin共享。*表示所有域都可以访问，同时可以将*改为指定的url，表示只有指定的url可以访问到资源 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    //允许请求资源的方式
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
  });

app.listen(3000, () => console.log('程序运行了'))